package com.example.atc.myapplication;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    MainViewModel mainViewModel = new MainViewModel();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainViewModel.img1 = (ImageView) findViewById(R.id.imageView1);
        mainViewModel.img2 = (ImageView) findViewById(R.id.imageView2);
        mainViewModel.img3 = (ImageView) findViewById(R.id.imageView3);
        mainViewModel.img4 = (ImageView) findViewById(R.id.imageView4);

        mainViewModel.btn_num1 = (Button) findViewById(R.id.btn_num1);
        mainViewModel.btn_num2 = (Button) findViewById(R.id.btn_num2);
        mainViewModel.btn_num3 = (Button) findViewById(R.id.btn_num3);
        mainViewModel.btn_num4 = (Button) findViewById(R.id.btn_num4);

        mainViewModel.btn_jia = (Button) findViewById(R.id.btn_jia);
        mainViewModel.btn_jian = (Button) findViewById(R.id.btn_jian);
        mainViewModel.btn_cheng = (Button) findViewById(R.id.btn_cheng);
        mainViewModel.btn_chu = (Button) findViewById(R.id.btn_chu);

        mainViewModel.btn_M = (Button) findViewById(R.id.btn_M);
        mainViewModel.btn_C = (Button) findViewById(R.id.btn_C);
        mainViewModel.btn_help = (Button) findViewById(R.id.btn_help);
        mainViewModel.btn_next = (Button) findViewById(R.id.btn_next);
        mainViewModel.btn_display = (Button) findViewById(R.id.btn_display);

        mainViewModel.btn_num1.setOnClickListener(this);
        mainViewModel.btn_num2.setOnClickListener(this);
        mainViewModel.btn_num3.setOnClickListener(this);
        mainViewModel.btn_num4.setOnClickListener(this);

        mainViewModel.btn_jia.setOnClickListener(this);
        mainViewModel.btn_jian.setOnClickListener(this);
        mainViewModel.btn_cheng.setOnClickListener(this);
        mainViewModel.btn_chu.setOnClickListener(this);

        mainViewModel.btn_M.setOnClickListener(this);
        mainViewModel.btn_C.setOnClickListener(this);
        mainViewModel.btn_help.setOnClickListener(this);
        mainViewModel.btn_next.setOnClickListener(this);

        mainViewModel.createGame();
    }

    @Override
    public void onClick(View v) {
        Button btn = (Button) findViewById(v.getId());
        String s = (String) btn.getText();
        switch (v.getId()) {
            case R.id.btn_next:
                reCal();
                mainViewModel.createGame();
                break;
            case R.id.btn_help:
                showAnswer();
                break;
            case R.id.btn_jia:
            case R.id.btn_jian:
            case R.id.btn_cheng:
            case R.id.btn_chu:
                mainViewModel.prepareCal = true;
                mainViewModel.calString = s;
                break;
            case R.id.btn_C:
                reCal();
                break;
            default:
                btn_click(v);
                break;
        }
        mainViewModel.btn_display.setText(mainViewModel.displayOut);
    }

    private void reCal() {
        mainViewModel.btn_num1.setEnabled(true);
        mainViewModel.btn_num2.setEnabled(true);
        mainViewModel.btn_num3.setEnabled(true);
        mainViewModel.btn_num4.setEnabled(true);
        mainViewModel.prepareLeftNumber = false;
        mainViewModel.prepareCal = false;
        mainViewModel.displayOut = "";
        mainViewModel.btn_M.setText("M");
        mainViewModel.btn_help.setText("?");
        mainViewModel.btn_help.setTextSize(30);
        mainViewModel.btn_display.setTextSize(30);
        mainViewModel.answerIndex = 0;
    }

    private void btn_click(View v) {
        mainViewModel.btn_help.setTextSize(30);
        mainViewModel.btn_display.setTextSize(30);
        mainViewModel.btn_help.setText("?");
        mainViewModel.answerIndex = 0;

        Button btn = (Button) findViewById(v.getId());
        String s = (String) btn.getText();

        if (s.equals("M")) {
            if (mainViewModel.prepareLeftNumber) {
                mainViewModel.prepareLeftNumber = false;
                mainViewModel.prepareCal = false;
                btn.setText(String.valueOf(mainViewModel.leftNumber));
            }
            mainViewModel.displayOut = "";
        } else if (!(btn == mainViewModel.btn_M && mainViewModel.prepareCal == !mainViewModel.prepareLeftNumber)) {
            if (!mainViewModel.prepareLeftNumber) {
                btn.setEnabled(false);
                mainViewModel.leftNumber = Integer.parseInt(s);
                mainViewModel.prepareLeftNumber = true;
            } else if (mainViewModel.prepareCal) {
                btn.setEnabled(false);
                mainViewModel.prepareCal = false;
                mainViewModel.rightNumber = Integer.parseInt(s);
                switch (mainViewModel.calString) {
                    case "+":
                        mainViewModel.leftNumber = mainViewModel.leftNumber + mainViewModel.rightNumber;
                        break;

                    case "-":
                        if (mainViewModel.leftNumber - mainViewModel.rightNumber < 0) {
                            reCal();
                            return;
                        }
                        mainViewModel.leftNumber = mainViewModel.leftNumber - mainViewModel.rightNumber;
                        break;

                    case "×":
                        mainViewModel.leftNumber = mainViewModel.leftNumber * mainViewModel.rightNumber;
                        break;

                    case "÷":
                        if (mainViewModel.leftNumber % mainViewModel.rightNumber != 0) {
                            reCal();
                            return;
                        }
                        mainViewModel.leftNumber = mainViewModel.leftNumber / mainViewModel.rightNumber;
                        break;
                }
            }
            if (btn == mainViewModel.btn_M) {
                btn.setText("M");
                btn.setEnabled(true);
            }
            mainViewModel.displayOut = String.valueOf(mainViewModel.leftNumber);
        }
        if (mainViewModel.leftNumber == 24 && !mainViewModel.btn_num1.isEnabled() && !mainViewModel.btn_num2.isEnabled() && !mainViewModel.btn_num3.isEnabled() && !mainViewModel.btn_num4.isEnabled() && mainViewModel.btn_M.getText() == "M") {
            reCal();
            mainViewModel.displayOut = "正确";
            mainViewModel.createGame();
        }
    }

    private void showAnswer() {
        mainViewModel.btn_num1.setEnabled(true);
        mainViewModel.btn_num2.setEnabled(true);
        mainViewModel.btn_num3.setEnabled(true);
        mainViewModel.btn_num4.setEnabled(true);
        mainViewModel.prepareLeftNumber = false;
        mainViewModel.prepareCal = false;
        mainViewModel.btn_M.setText("M");

        int index = mainViewModel.answerIndex % mainViewModel.answer.size();
        mainViewModel.btn_help.setTextSize(16);
        mainViewModel.btn_help.setText(String.format("%d/%d", index + 1, mainViewModel.answer.size()));
        mainViewModel.btn_display.setTextSize(16);
        mainViewModel.displayOut = mainViewModel.answer.get(index);
        mainViewModel.answerIndex++;
    }
}
